import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

public class Solution {
    /*

    以数组 intervals 表示若干个区间的集合，其中单个区间为 intervals[i] = [start_i, end_i] 。
    请你合并所有重叠的区间，并返回 一个不重叠的区间数组，该数组需恰好覆盖输入中的所有区间 。

    输入：intervals = [[1,3],[2,6],[8,10],[15,18]]
    输出：[[1,6],[8,10],[15,18]]
    解释：区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

     */


    public int[][] merge(int[][] intervals) {
//        Arrays.sort(intervals, new Comparator<int[]>() {
//            @Override
//            public int compare(int[] o1, int[] o2) {
//                return o1[0] - o2[0];
//            }
//        });

        Arrays.sort(intervals, (o1, o2)-> o1[0] - o2[0]);

        //存储合并后的区间
        ArrayList<int[]> merged = new ArrayList<>();
        for(int[] interval: intervals){
            if(merged.isEmpty() || merged.get(merged.size() - 1)[1] < interval[0]){
                merged.add(interval);
            }else{
                int max = Integer.max(merged.get(merged.size() - 1)[1], interval[1]);
                //更新merged区间最后一个元素的结束位置
                merged.get(merged.size() - 1)[1] = max;
            }
        }

        return merged.toArray(new int[merged.size()][]);
    }
}
